#ifndef QUEUE_H
#define QUEUE_H

#include <string>
using namespace std;

// Why do we use the CSCI123 namespace?
// Will the code work without the namespace?
namespace CSCI123 {

	/**
	 * Contains one stack frame which is the data
	 * and a pointer to the next frame
	 */
	struct QueueNode {
		string data;
		QueueNode *next;
	};
	
	// redefine a frame pointer because I'm lazy and
	// don't want to write someDataType *identifier
	typedef QueueNode* QueueNodePtr;

	/**
	 * Queue class First In/First Out data structure
	 * @author: Brad Rippe(brippe@fullcoll.edu) 
	 */
	class Queue {
	public:
		Queue();
		Queue(const Queue& aQueue);
		~Queue();
		void enqueue(const string& aString);
		string dequeue();
		bool isEmpty() const;
		friend ostream& operator <<(ostream& out, const Queue& aQueue); 
	private:
		QueueNodePtr front;
		QueueNodePtr back;
	};
}
#endif
